# 引入django框架中http模块 HttpResponse函数
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from mydjango.models import Users
from mydjango.models import Goods
from mydjango.models import Cars
import math
from json import dumps
from django.http import JsonResponse


# 设置处理函数
def hw(requset):
    return HttpResponse('<h1 align="center" style="color:red;">你好！</h1>')


def index(request):
    # name = request.GET.get('name')
    # name 值获取 和session关联  uid是否存在
    if request.session.get('uid', None):
        # 有值 True 说明登录过
        name = Users.objects.filter(uid=request.session['uid'])[0].username
    else:
        # 无值  False 说明没登录
        name = None

    # stuname = "xjl"
    # grade = 45
    # good = {'id': 1, 'name': '西瓜', 'imgsrc': '/static/img/1000.jpg', 'price': 3.9, 'count': 4}
    # goods = [
    #      {'id': 1, 'name': '西瓜', 'imgsrc': '/static/img/1000.jpg', 'price': 3.9, 'count': 4},
    #      {'id': 2, 'name': '苹果', 'imgsrc': '/static/img/1000.jpg', 'price': 3.9, 'count': 4},
    #      {'id': 3, 'name': '香蕉', 'imgsrc': '/static/img/1000.jpg', 'price': 3.9, 'count': 4},
    #      {'id': 4, 'name': '橘子', 'imgsrc': '/static/img/1000.jpg', 'price': 3.9, 'count': 4}
    # ]
    # #接收前端传递  keyword
    keyword = request.GET.get('keywords')
    if keyword:
        goods = Goods.objects.filter(name__contains=keyword)
    else:
        goods = Goods.objects.all()
    # 给前端传递的页码列表  pagelist[1,2,3,] len()方法  获取列表长度  math.ceil()向上取整
    pagelist = range(1, math.ceil(len(goods) / 5) + 1)
    # 接收  前端传递的 页码  参数
    page = request.GET.get('page')
    if page:
        # 有值  字符串  转换为  整数
        page = int(page)
    else:
        # 无值
        page = 1
    # 截取数据查询的结果的前5个
    # 利用列表切片      "stuname": stuname, "grade": grade
    goods = goods[5 * (page - 1):5 * page]
    return render(request, "index.html", {"goods": goods, "name": name, "pagelist": pagelist})


def login(request):
    if request.POST:
        username = request.POST.get('username')
        userpsd = request.POST.get('userpsd')
        # 指的是数据库里面的username     账号名
        result = Users.objects.filter(username=username, userpsd=userpsd)
        # print(result[0].username)
        if result:
            # 判断一下  当前有值的账号对应的密码是否匹配
            if result[0].userpsd == userpsd:
                # return HttpResponse('登录成功！')
                # return render(request,'index.html')
                # 设置session会话存储 uid
                request.session['uid'] = result[0].uid
                return redirect('/index')
                # return redirect('/index/?name='+result[0].username)     #重定向路由
            else:
                # 账号存在  密码错误
                # return redirect(request, 'login.html')
                return render(request, "login.html")
        else:
            # 账号不存在
            # return HttpResponse('登录失败！')
            return render(request, "register.html")
        # return render(request, "login.html")
    return render(request, 'login.html')

    ##老师上课


def register(request):
    if request.POST:
        username = request.POST.get('username')
        userpsd = request.POST.get('userpsd')
        # 插入数据库
        ## 将用户类  实例化 对象
        # user1 = Users(uid=1,username=username,userpsd=userpsd)
        # ## 数据保存
        # user1.save()
        Users.objects.create(uid=None, username=username, userpsd=userpsd)
    return render(request, 'register.html')


# http超文本标记语言
def nav(request):
    one = [
        {'院系设置': [
            {'理工农学院': ['计算机技术与科学', '软件工程', '土木建筑', '园艺设计']},
            {'文艺法学院': ['专业1', '专业2', '专业3', '专业4']},
            {'经管学院': ['专业5', '专业6', '专业7', '专业8']},
            {'医学院': ['专业9', '专业10', '专业11', '专业12']}
        ]},
        {'师资团队': ['师资团队1', '师资团队2', '师资团队3']},
        {'科学研究': ['科学研究1', '科学研究2']},
        {'招生就业': ['招生就业']},
    ]
    return render(request, 'nav.html', {'one': one})


def goodinfo(request):
    # 接收前端传递的商品id参数
    gid = request.GET.get('gid')
    # 接收 详情页加入购物车传递的商品id  POST请求
    if request.POST:
        if request.session.get('uid', None):
            gid = request.POST.get('gid')
            uid = request.session['uid']
            # 间接数据库操作  通过封装好的数据模型
            # car = Cars(gid=gid, buy_count=1, uid=uid)
            # 先查询数据库goods表中gid对应商品信息数据   再插入购物车表中
            good = Goods.objects.filter(gid=gid)[0]
            car = Cars(good=good, buy_count=1, uid=uid)
            car.save()
        else:
            return redirect('/login/')
    # 根据参数执行数据库操作  条件查询  filter
    goods = Goods.objects.filter(gid=gid)
    # 接收 详情页加入购物车传递的商品id
    # car_gid = request.GET.get('car_gid')
    # if car_gid:
    #      # 根据参数执行数据库操作  插入数据（添加数据）
    #      Cars.objects.create(cid=None, gid=car_gid, buy_count=1)
    #      goods = Goods.objects.filter(gid=car_gid)
    return render(request, 'goodinfo.html', {'goods': goods})


def shoppingcar(request):
    # 先判断 判断是否登录  用request.session 对象中是否存在键uid的值
    if request.session.get('uid', None):  # 有值 True 说明登录过
        # 获取 session中的uid
        uid = request.session['uid']
        # 数据库操作  查询操作  购物车表
        cars = Cars.objects.filter(uid=uid)
        # 数据库查询结果 cars [{cid,gid,by_count,uid}...]

        # 数据库查询结果 cars [{cid,good,by_count,uid}...]
        goods = []  # 设定 准备响应前端页面的所有购物车商品数据的列表
        for item in cars:  # item{cid,gid,buy_count,uid}
            # good = Goods.objects.filter(gid=item.gid)[0]
            good = item.good
            # good {gid,name,price,count,imgsrc,buy_count,allprice}
            good.buy_count = item.buy_count
            good.allprice = good.price * good.buy_count
            goods.append(good)
        return render(request, 'shoppingcar.html', {'goods': goods})
    else:  # 无值 False 说明没登录
        return redirect('/login/')


def loginout(request):
    # 业务处理  --> 数据处理
    # 都可以 退出登录
    # 删除session对象中uid键值对 实质对数据库中session表修改session_data字段
    # request.session.pop('uid')
    # request.session.clear()
    # del request.session['uid']

    # 删除数据库中session表对应记录/数据
    # request.session.delete(request.session.session_key)
    request.session.flush()
    return redirect('/index/')


def B(request):
    #      # roles = ["管理员", "CEO", "保安"]
    #      # user_info = {"name": "小明", "salary": 1000, "role": "保洁"}
    #      # res = requests.get("http://www.chinaunicom.com/api/article/NewsByIndex/2/2021/11/news")
    #      # data_list = res.json()
    #      # print(data_list)
    #
    return render(requests, 'B.html')


# {"n1": roles, "n3": user_info}


# 响应请求信号：
def something(request):
    # request是一个对象，封装了用户发送过来的所用相关数据
    # 1.获取请求方式  GET/POST
    print(request.method)
    # 2.在URL上传递值
    print(request.GET)
    # 3. 在请求体中提交数据
    print(request.POST)
    # 4. 【响应】HttpResponse("返回内容")，内容字符串返回给请求者
    # return HttpResponse("返回内容")
    # 5. 【响应】读取HTML的内容 + 渲染(替换)  -> z字符串，返回给用户浏览器
    # return render(request, 'something.html', {"title": "来了"})
    # 6. 【响应】让浏览器重定向到其他页面
    return redirect("https://www.baidu.com")
